window.onload=function(){
	var oUl=document.getElementById('ul1');
	var aLi=oUl.children;
	var zIndex=2;
	//0.布局转换
	var aPos=[];	//[{left:?,top:?},{},{}]
	
	for(var i=0;i<aLi.length;i++){
		aPos.push({left:aLi[i].offsetLeft,top:aLi[i].offsetTop});	
		aLi[i].style.left=aPos[i].left+'px';
		aLi[i].style.top=aPos[i].top+'px';
	}
	for(var i=0;i<aLi.length;i++){
		aLi[i].style.position='absolute';	
		aLi[i].style.margin=0;
		aLi[i].index=i;
	}
	
	//1.拖拽
	for(var i=0;i<aLi.length;i++){
		drag(aLi[i]);//拖拽每一个图标	
	}
	
	function drag(obj){
		obj.onmousedown=function(ev){
			var oEvt=ev||event;
			var disX=oEvt.clientX-obj.offsetLeft;	
			var disY=oEvt.clientY-obj.offsetTop;
			obj.style.zIndex=zIndex++;
			clearInterval(obj.timer);
			document.onmousemove=function(ev){
				var oEvt=ev||event;
				obj.style.left=oEvt.clientX-disX+'px';
				obj.style.top=oEvt.clientY-disY+'px';
				
				//2.move时碰撞
				var nearObj=findNearest(obj);
				if(nearObj && nearObj!=obj){//撞到了
					//动所有的房客
					//交换索引，所有房客
					//'所有'有条件的
					var n=obj.index;
					var m=nearObj.index;
					for(var i=0;i<aLi.length;i++){
						//n<aLi[i].index<=m
						//m<=aLi[i].index<n
						if(aLi[i].index>n && aLi[i].index<=m){
							//←
							aLi[i].index--;
							move(aLi[i],aPos[aLi[i].index]);
						}else if(aLi[i].index>=m && aLi[i].index<n){
							//→	
							aLi[i].index++;
							move(aLi[i],aPos[aLi[i].index]);
						}
					}
					obj.index=m;
				}
			};	
			document.onmouseup=function(){
					document.onmousemove=document.onmouseup=null;
				
				//抓着的对象回自个位置
				
				move(obj,aPos[obj.index]);
				
			};
			return false;
		};	
	}
	function findNearest(obj){
		var minDis=99999999;
		var minIndex=-1;
		for(var i=0;i<aLi.length;i++){
			//if(obj==aLi[i]) continue;
			aLi[i].index2=i;
			if(collTest(obj,aLi[i])){	//撞到的房子
				//还要找最近
				
				// var dis=getDis(obj,aLi[i]);//取出来的也是obj1到房子的距离
				// console.log(dis);
				// if(dis<minDis){
				// 	minDis=dis;
				// 	minIndex=i;	
				// }
				return collTest(obj,aLi[i]);
			}
			
		}
		// if(minIndex==-1){
		// 	return null;	
		// }else{
			//return aLi[this.index2];	//就返房客出去
		//}
	}
	function getDis(obj1,obj2){
		var a=aPos[obj2.index].left-obj1.offsetLeft
		var b=aPos[obj2.index].top-obj1.offsetTop;
		return Math.sqrt(a*a+b*b);
	}
	function collTest(obj1,obj2){//obj1对象和obj2的位置（房子)撞
		var l1=obj1.offsetLeft;
		var t1=obj1.offsetTop;
		var r1=obj1.offsetLeft+obj1.offsetWidth;
		var b1=obj1.offsetTop+obj1.offsetHeight;
			
		var l2=aPos[obj2.index].left;
		var t2=aPos[obj2.index].top;
		var r2=aPos[obj2.index].left+obj2.offsetWidth;
		var b2=aPos[obj2.index].top+obj2.offsetHeight;
		
		if(l1>r2||t1>b2||r1<l2||b1<t2){
			return 	false;
		}else{
			//return true;	
			return obj2;
		}
	}
};